]> permondes.de Git - Analog_Engine.git/blobdiff - scripts/Damped Harmonic Oscillator.AESL
a rope slides frictionlessly down the edge of a table
[Analog_Engine.git] / scripts / Damped Harmonic Oscillator.AESL
diff --git a/scripts/Damped Harmonic Oscillator.AESL b/scripts/Damped Harmonic Oscillator.AESL
new file mode 100644 (file)
index 0000000..7451fcb
--- /dev/null
@@ -0,0 +1,39 @@
+IDENTIFICATION DIVISION
+PROGRAM-ID Damped_Oscillator
+
+ENVIRONMENT DIVISION
+ENGINE Anabrid-THAT
+REQUIRES COEFFICIENT 5
+REQUIRES INTEGRATOR 2
+REQUIRES INVERTER 1
+REQUIRES SUMMER 2
+
+DATA DIVISION
+OUTPUT OUTPUT.U y
+COEFFICIENT.1 InitialPosition
+COEFFICIENT.2 InitialSpeed
+COEFFICIENT.3 SpringForce
+COEFFICIENT.4 Damping # linear to speed
+COEFFICIENT.5 Mass # 1 / mass
+
+PROGRAM DIVISION
+# Colors being used for wiring
+# - black:  y0
+# - blue:   y0’
+# - green:  y0’’
+# - yellow: y’’, y’
+# - red:    y
+-1 -> COEFFICIENT.InitialPosition -> -y0 # -initial position of the mass
+-1 -> COEFFICIENT.InitialSpeed -> y0s’ # y’ is scaled to be within -1..+1
++1, y0s’, y0s’ -> SUMMER -> y0’
+y’’, IC:y0’ -> INTEGRATOR -> -y’
+-y’,IC:-y0 -> INTEGRATOR -> y
+y -> COEFFICIENT.SpringForce -> S*y # springforce times displacement
+-y’ -> INVERTER -> y’
+y’ -> COEFFICIENT.Damping -> D*y’ # damping times speed
+S*y, D*y’ -> SUMMER -> -(Dy’+Sy)
+-(Dy’+Sy) -> COEFFICIENT.Mass -> -1/m*(Dy’+Sy)=y’’
+
+OPERATION DIVISION
+MODE REPEAT
+OP-TIME 80ms